% Projeto 1.2  IA
% Ricardo Saffi   037415 
% Tiago Falcao    046802
%
% USO >>>>> s(S,L,[todo,menino,que,correu,caiu],[]).
%
%

?- op(1150,xfy,&).
?- op(1200,xfy,→).


% Frases Afirmativas
s(s(SN,SV),Logica)--> sn(SN,Sujeito,Acao,Logica,Genero,Numero),sv(SV,Sujeito,Acao,Numero).

% Sujeitos
sn(sn(Artigo,Substantivo,SE),Sujeito,Acao,Logica & LogicaSE,Genero,Numero)--> 
artigo(Artigo,Sujeito,Nome,Acao,Logica,Definido,Genero,Numero),
substantivo(Substantivo,Sujeito,Subs,Nome,Genero,Numero),
se(SE,Sujeito,LogicaSE).

sn(sn(Artigo,Substantivo,SE),Sujeito,Acao,Logica & LogicaSE,Genero,Numero)--> 
pronome(Artigo,Sujeito,Nome,Acao,Logica,Definido,Genero,Numero),
substantivo(Substantivo,Sujeito,Subs,Nome,Genero,Numero),
se(SE,Sujeito,LogicaSE).

sn(sn(Artigo,Substantivo),Sujeito,Acao,Logica,Genero,Numero)--> artigo(Artigo,Sujeito,Nome,Acao,Logica,Definido,Genero,Numero),substantivo(Substantivo,Sujeito,Subs,Nome,Genero,Numero).
sn(sn(Artigo,Substantivo),Sujeito,Acao,Logica,Genero,Numero)--> pronome(Artigo,Sujeito,Subs,Acao,Logica,Definido,Genero,Numero),substantivo(Substantivo,Sujeito,Subs,Nome,Genero,Numero).


% Predicados
sv(sv(Verbo,SN),Sujeito,Logica, Numero) --> verbo(Verbo,Sujeito,Sujeito2,Acao2,transitivo,Numero,Pessoa,Tempo),
sn(SN,Sujeito2,Acao2,Logica,Genero2,Numero2).
sv(sv(Verbo),Sujeito,Acao, Numero) --> verbo(Verbo,Sujeito,Acao,intransitivo,Numero,Pessoa,Tempo).


% Explicativa
se(se(preposicao(que),SN,Verbo),Sujeito2,Logica) --> [que],sn(SN,Sujeito,Acao,Logica,Genero,Numero),verbo(Verbo,Sujeito,Sujeito2,Logica,transitivo,Numero,Pessoa,Tempo).

se(se(preposicao(que),Verbo,SN),Sujeito,Logica) --> [que],verbo(Verbo,Sujeito,Sujeito2,Acao2,transitivo,Numero,Pessoa,Tempo),
sn(SN,Sujeito2,Acao2,Logica,Genero2,Numero2).

se(se(preposicao(que),Verbo),Sujeito,Logica) --> [que],verbo(Verbo,Sujeito,Logica,intransitivo,Numero,Pessoa,Tempo).


% Classes
artigo(artigo(HEAD),Sujeito,Substantivo,Acao,Logica,definido,Genero,Numero,[HEAD|TAIL],TAIL):- artigo_dic(HEAD,definido,Genero,Numero,Sujeito,Substantivo,Acao,Logica).

pronome(pronome(HEAD),Sujeito,Substantivo,Acao,Logica,indefinido,Genero,Numero,[HEAD|TAIL],TAIL):- pronome_dic(HEAD,indefinido,Genero,Numero,Sujeito,Substantivo,Acao,Logica).

substantivo(substantivo(HEAD),Sujeito,Logica,HEAD,Genero,Numero,[HEAD|TAIL],TAIL):- substantivo_dic(HEAD,Genero,Numero,Sujeito,Logica).

% Verbo Intransitivo
verbo(verbo(HEAD),Sujeito,Logica,intransitivo,Numero,Pessoa,Tempo,[HEAD|TAIL],TAIL):- verbo_dic(HEAD,intransitivo,Numero,Pessoa,Tempo,Sujeito,Logica).

% Verbo Transitivo
verbo(verbo(HEAD),Sujeito,Objeto,Logica,transitivo,Numero,Pessoa,Tempo,[HEAD|TAIL],TAIL):- verbo_dic(HEAD,transitivo,_,Numero,Pessoa,Tempo,Sujeito,Objeto,Logica).


% Dicionario
pronome_dic(todo,indefinido,masculino,singular,Sujeito,Substantivo,Acao,todo(Sujeito,Substantivo → Acao)).
pronome_dic(cada,indefinido,masculino,singular,Sujeito,Substantivo,Acao,todo(Sujeito,Substantivo → Acao)).
pronome_dic(toda,indefinido,feminino,singular,Sujeito,Substantivo,Acao,todo(Sujeito,Substantivo → Acao)).
pronome_dic(cada,indefinido,feminino,singular,Sujeito,Substantivo,Acao,todo(Sujeito,Substantivo → Acao)).
pronome_dic(todos,indefinido,masculino,plural,Sujeito,Substantivo,Acao,todo(Sujeito,Substantivo → Acao)).
pronome_dic(todas,indefinido,feminino,plural,Sujeito,Substantivo,Acao,todo(Sujeito,Substantivo → Acao)).

pronome_dic(um,indefinido,masculino,singular,Sujeito,Substantivo,Acao,existe(Sujeito,Substantivo & Acao)).
pronome_dic(uma,indefinido,feminino,singular,Sujeito,Substantivo,Acao,existe(Sujeito,Substantivo & Acao)).
pronome_dic(uns,indefinido,masculino,plural,Sujeito,Substantivo,Acao,existem(Sujeito,Substantivo & Acao)).
pronome_dic(umas,indefinido,feminino,plural,Sujeito,Substantivo,Acao,existem(Sujeito,Substantivo & Acao)).

artigo_dic(o,definido,masculino,singular,Substantivo,Substantivo,Acao,Acao).
artigo_dic(os,definido,masculino,plural,Substantivo,Substantivo,Acao,Acao).
artigo_dic(a,definido,feminino,singular,Substantivo,Substantivo,Acao,Acao).
artigo_dic(as,definido,feminino,plural,Substantivo,Substantivo,Acao,Acao).

substantivo_dic(menino,masculino,singular,S,menino(S)).
substantivo_dic(meninos,masculino,plural,S,meninos(S)).
substantivo_dic(cachorro,masculino,singular,S,cachorro(S)).
substantivo_dic(cachorros,masculino,plural,S,cachorros(S)).
substantivo_dic(menina,feminino,singular,S,menina(S)).
substantivo_dic(meninas,feminino,plural,S,meninas(S)).

verbo_dic(caiu,intransitivo,singular,terceira,passado,S,caiu(S)).
verbo_dic(caíram,intransitivo,plural,terceira,passado,S,caíram(S)).
verbo_dic(correu,intransitivo,singular,terceira,passado,S,correu(S)).

verbo_dic(beijou,transitivo,direto,singular,terceira,passado,S,O,beijou(S,O)).
verbo_dic(viu,transitivo,direto,singular,terceira,passado,S,O,viu(S,O)).
verbo_dic(viram,transitivo,direto,plural,terceira,passado,S,O,viram(S,O)).
verbo_dic(ama,transitivo,direto,singular,terceira,passado,S,O,ama(S,O)).
